package niconama04.shared.data;

import java.util.ArrayList;
import java.util.List;

/**
 * 定数クラス
 * 
 * @author brigen
 */
public class Constants {

	/**
	 * 品詞
	 * 
	 * @author brigen
	 */
	public enum Pos {

		/** 形容詞 */
		KEIYOUSHI(1, "形容詞"),

		/** 形容動詞 */
		KEIYOUDOUSHI(2, "形容動詞"),

		/** 感動詞 */
		KANDOUSHI(3, "感動詞"),

		/** 副詞 */
		HUKUSHI(4, "副詞"),

		/** 連体詞 */
		RENTAISHI(5, "連体詞"),

		/** 接続詞 */
		SETSUZOKUSHI(6, "接続詞"),

		/** 接頭辞 */
		SETTOUJI(7, "接頭辞"),

		/** 接尾辞 */
		SETSUBIJI(8, "接尾辞"),

		/** 名詞 */
		MEISHI(9, "名詞"),

		/** 動詞 */
		DOUSHI(10, "動詞"),

		/** 助詞 */
		JOSHI(11, "助詞"),

		/** 助動詞 */
		JODOUSHI(12, "助動詞"),

		/** 特殊 */
		TOKUSHU(13, "特殊"),

		HUMEI(99, "不明");

		/** key */
		private int key;

		/** name */
		private String name;

		/**
		 * [constructor]
		 *
		 * @param x_key key
		 * @param x_name name
		 */
		Pos(int x_key, String x_name) {
			key = x_key;
			name = x_name;
		}

		/**
		 * keyを返す
		 *
		 * @return key
		 */
		public int getKey() {
			return key;
		}

		/**
		 * nameを返す
		 *
		 * @return name
		 */
		public String getName() {
			return name;
		}

		@Override
		public String toString() {
			return String.valueOf(getKey());
		}
	}

	public static Pos getPos(int x_posKey) {
		Pos result = null;
		switch (x_posKey) {
			case 1:
				result = Pos.KEIYOUSHI;
				break;
			case 2:
				result = Pos.KEIYOUDOUSHI;
				break;
			case 3:
				result = Pos.KANDOUSHI;
				break;
			case 4:
				result = Pos.HUKUSHI;
				break;
			case 5:
				result = Pos.RENTAISHI;
				break;
			case 6:
				result = Pos.SETSUZOKUSHI;
				break;
			case 7:
				result = Pos.SETTOUJI;
				break;
			case 8:
				result = Pos.SETSUBIJI;
				break;
			case 9:
				result = Pos.MEISHI;
				break;
			case 10:
				result = Pos.DOUSHI;
				break;
			case 11:
				result = Pos.JOSHI;
				break;
			case 12:
				result = Pos.JODOUSHI;
				break;
			case 13:
				result = Pos.TOKUSHU;
				break;
			case 99:
				result = Pos.HUMEI;
				break;
		}
		return result;
	}

	/**
	 * 単語リストから文法の構成を生成する
	 *
	 * @param x_words 単語リスト
	 * @return 文法の構成
	 */
	public static String getConfiguration(List<Word> x_words) {
		StringBuilder sb = new StringBuilder();
		for (Word word : x_words) {
			if (sb.length() != 0) {
				sb.append("_");
			}
			sb.append(word.getPos().getKey());
		}
		return sb.toString();
	}

	/**
	 * 構成から品詞リストを生成する
	 *
	 * @param x_configuration 構成
	 * @return 品詞リスト
	 */
	public static List<Pos> getPoss(String x_configuration) {
		List<Pos> result = new ArrayList<Pos>();
		String[] tokens = x_configuration.split("_");
		for (String token : tokens) {
			int key = Integer.parseInt(token);
			result.add(getPos(key));
		}
		return result;
	}
}